package tacos.simpleflow;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import org.springframework.integration.dsl.MessageChannels;
import org.springframework.integration.file.dsl.Files;
import org.springframework.integration.file.support.FileExistsMode;

import java.io.File;

@Configuration
public class FileWriterIntegrationDSLConfig {
    @Bean
    public IntegrationFlow fileWriterFlow() {
        /**
         * 在Bean中定义整个流，
         * 1.从TextInChannel中获取信息
         * 2.进入转换器转为大写
         * 3.交给出站通道适配器进行操作
         * 4.Get调用返回要构件的 IntegrationFlow
         *
         * action:
         * 对于链接转换器和出战通道适配器的通道，没有通过名字引用它。
         * 如果需要显式的配置通道，可以在流定义后通过调用channel()来引用它的名称
         */
        return IntegrationFlows.from(MessageChannels.direct("textInChannel")).
                <String, String>transform(t -> t.toUpperCase()). // .channel(MessageChannels.direct("fileWriterChannel")).
                handle(Files.outboundAdapter(new File("D:\\springbootDSLFile")).
                        fileExistsMode(FileExistsMode.APPEND).appendNewLine(true)).get();
    }
}
